home *** CD-ROM | disk | FTP | other *** search
/ Aminet 28 / Aminet 28 (1998)(GTI - Schatztruhe)[!][Dec 1998].iso / Aminet / dev / c / qtools0.2-src.lha / src / util / qbsp.c < prev    next >
Encoding:
C/C++ Source or Header  |  1998-07-13  |  3.8 KB  |  164 lines

  1. #define    LIBQTOOLS_CORE
  2. #define    LIBQBUILD_CORE
  3. #include <libqtools.h>
  4. #include <libqbuild.h>
  5.  
  6. struct memory bspStatic;
  7. struct memory *bspMem = &bspStatic;
  8.  
  9. extern char *argv0;
  10. extern char bspfilename[NAMELEN_PATH];
  11. extern char pointfilename[NAMELEN_PATH];
  12. extern char portfilename[NAMELEN_PATH];
  13. extern char hullfilename[NAMELEN_PATH];
  14.  
  15. extern void CreateHulls(__memBase);
  16. extern void ReadClipHull(__memBase, register int hullnum);
  17. extern void UpdateEntLump(__memBase);
  18.  
  19. extern bool drawflag;
  20.  
  21. /*
  22.  * =================
  23.  * ProcessFile
  24.  * 
  25.  * =================
  26.  */
  27. static void ProcessFile(register char *sourcebase, register char *bspfilename1)
  28. {
  29.   char *mapBuf;
  30.   HANDLE bspFile;
  31.  
  32.   /* create filenames */
  33.   strcpy(bspfilename, bspfilename1);
  34.   ReplaceExt(bspfilename, "bsp");
  35.  
  36.   strcpy(hullfilename, bspfilename1);
  37.   ReplaceExt(hullfilename, "h0");
  38.  
  39.   strcpy(portfilename, bspfilename1);
  40.   ReplaceExt(portfilename, "prt");
  41.  
  42.   strcpy(pointfilename, bspfilename1);
  43.   ReplaceExt(pointfilename, "pts");
  44.  
  45.   if (!(bspMem->bspOptions & QBSP_ONLYENTS)) {
  46.     remove(bspfilename);
  47.     if (!(bspMem->bspOptions & QBSP_USEHULLS)) {
  48.       hullfilename[strlen(hullfilename) - 1] = '1';
  49.       remove(hullfilename);
  50.       hullfilename[strlen(hullfilename) - 1] = '2';
  51.       remove(hullfilename);
  52.     }
  53.     remove(portfilename);
  54.     remove(pointfilename);
  55.   }
  56.  
  57.   /* init the tables to be shared by all models */
  58.   BeginBSPFile(bspMem);
  59.  
  60.   /* load brushes and bspMem->mapentities */
  61.   mapBuf = (char *)GetVoid(sourcebase);
  62.   LoadMapFile(bspMem, mapBuf);
  63.   tfree(mapBuf);
  64.  
  65.   if (bspMem->bspOptions & QBSP_ONLYENTS) {
  66.     UpdateEntLump(bspMem);
  67.     return;
  68.   }
  69.  
  70.   /* the clipping hulls will be written out to text files by forked processes */
  71.   CreateHulls(bspMem);
  72.  
  73.   ReadClipHull(bspMem, 1);
  74.   ReadClipHull(bspMem, 2);
  75.  
  76.   WriteEntitiesToString(bspMem);
  77.  
  78.   bspFile = __open(bspfilename, H_WRITE_BINARY);
  79.   FinishBSPFile(bspMem, bspFile);
  80.   __close(bspFile);
  81.  
  82.   FreeClusters(bspMem, 0);
  83. }
  84.  
  85. /*
  86.  * ==================
  87.  * main
  88.  * 
  89.  * ==================
  90.  */
  91. int main(int argc, char **argv)
  92. {
  93.   int i;
  94.   char sourcename[NAMELEN_PATH];
  95.   char destname[NAMELEN_PATH];
  96.  
  97.   memset(bspMem, 0, sizeof(struct memory));
  98.  
  99.   if (!setjmp(eabort)) {
  100.     /* */
  101.     /* check command line flags */
  102.     /* */
  103.     for (i = 1; i < argc; i++) {
  104.       if (argv[i][0] != '-')
  105.     break;
  106.       else if (!strcmp(argv[i], "-drawGL")) {
  107.     drawflag = TRUE;
  108.     Draw_Init();
  109.       }
  110.       else if (!strcmp(argv[i], "-watervis"))
  111.     bspMem->bspOptions |= QBSP_WATERVIS;
  112.       else if (!strcmp(argv[i], "-slimevis"))
  113.     bspMem->bspOptions |= QBSP_SLIMEVIS;
  114.       else if (!strcmp(argv[i], "-notjunc"))
  115.     bspMem->bspOptions |= QBSP_NOTJUNC;
  116.       else if (!strcmp(argv[i], "-nofill"))
  117.     bspMem->bspOptions |= QBSP_NOFILL;
  118.       else if (!strcmp(argv[i], "-noclip"))
  119.     bspMem->bspOptions |= QBSP_NOCLIP;
  120.       else if (!strcmp(argv[i], "-onlyents"))
  121.     bspMem->bspOptions |= QBSP_ONLYENTS;
  122.       else if (!strcmp(argv[i], "-usehulls"))
  123.     bspMem->bspOptions |= QBSP_USEHULLS;
  124.       else if (!strcmp(argv[i], "-hullnum")) {
  125.     hullnum = atoi(argv[i + 1]);
  126.     i++;
  127.       }
  128.       else if (!strcmp(argv[i], "-subdivide")) {
  129.     subdivide_size = atoi(argv[i + 1]);
  130.     i++;
  131.       }
  132.       else
  133.     Error("qbsp: Unknown option '%s'", argv[i]);
  134.     }
  135.  
  136.     if (i != argc - 2 && i != argc - 1)
  137.       Error("usage: qbsp [options] sourcefile [destfile]\noptions: -nojunc -nofill -draw -onlyents -verbose");
  138.  
  139.     /* */
  140.     /* let forked processes change name for ps status */
  141.     /* */
  142.     argv0 = argv[0];
  143.  
  144.     /* */
  145.     /* create destination name if not specified */
  146.     /* */
  147.     strcpy(sourcename, argv[i]);
  148.     ReplaceExt(sourcename, "map");
  149.  
  150.     if (i != argc - 2) {
  151.       strcpy(destname, argv[i]);
  152.       ReplaceExt(destname, "bsp");
  153.       mprintf("    - outputfile: %s\n", destname);
  154.     }
  155.     else
  156.       strcpy(destname, argv[i + 1]);
  157.  
  158.     ProcessFile(sourcename, destname);
  159.     PrintMemory();
  160.   }
  161.  
  162.   return 0;
  163. }
  164.